package com.wangjie.pattern.template;

/**
 * 模板方法模式
 *
 * 网络课程创建流程: 发布预习资料 -> 制作课件PPT -> 在线直播 -> 提交课堂笔记 -> 布置作业 -> 检查作业
 */
public abstract class AbstractCourse {
    public final void createCourse() {
        // 1.发布预习资料
        publishResource();

        // 2.制作课件PPT
        createPPT();

        // 3.在线直播
        liveOnLine();

        // 4.提交课堂笔记
        submitResource();

        // 5.布置作业
        assignHomework();

        if (needCheckHomework()) {
            // 6.检查作业
            checkHomework();
        }
    }

    abstract void checkHomework();

    // 钩子方法
    boolean needCheckHomework() {
        return false;
    }

    void assignHomework() {
        System.out.println("布置作业");
    }

    void submitResource() {
        System.out.println("提交课堂笔记");
    }

    void liveOnLine() {
        System.out.println("在线直播");
    }

    void createPPT() {
        System.out.println("制作课件PPT");
    }

    void publishResource() {
        System.out.println("发布预习资料");
    }
}